Cache 缓存
Actions/Cache 缓存
官方文档也有说明 缓存文档
缓存大致原理就是把目标路径打包存储下来,并记录一个唯一key。
下次启动时,根据key去查找。找到了就再按路径解压开。
steps:
...
- use: actions/cache@v1
with:
...
...
解决了什么
工作流程运行通常在不同运行之间重新使用相同的输出或下载的依赖项。 例如,Maven、Gradle、npm 和 Yarn 等软件包和依赖项管理工具都会对下载的依赖项保留本地缓存。
GitHub 托管的运行器在一个干净的虚拟环境中启动,每次都必须下载依赖项,造成网络利用率提高、运行时间延长和成本增加。 为帮助加快重新创建这些文件,GitHub 可以缓存您在工作流程中经常使用的依赖项。
要缓存作业的依赖项,您需要使用 GitHub 的 cache
操作。 该操作检索由唯一键标识的缓存。 更多信息请参阅 actions/cache
。
如果要缓存下面列出的包管理器,请考虑使用相应的 setup-* 操作,这些操作几乎不需要任何配置,并且易于使用。
官方案例
包管理器 | 用于缓存的 setup-* 操作 |
---|---|
npm, yarn, pnpm | setup-node |
pip, pipenv | setup-python |
gradle, maven | setup-java |
ruby gems | setup-ruby |
缓编译一个Qt项目为例
无使用缓存
name: Windows
on: [push,pull_request]
jobs:
build:
name: Build
runs-on: windows-latest
strategy:
matrix:
qt_ver: [5.12.6]
qt_target: [desktop]
qt_arch: [win64_msvc2017_64, win32_msvc2017]
include:
- qt_arch: win64_msvc2017_64
msvc_arch: x64
- qt_arch: win32_msvc2017
msvc_arch: x86
# 步骤
steps:
# 安装Qt
- name: Install Qt
uses: jurplel/install-qt-action@v2.0.0
with:
version: ${{ matrix.qt_ver }}
target: ${{ matrix.qt_target }}
arch: ${{ matrix.qt_arch }}
# 拉取代码
- uses: actions/checkout@v1
with:
fetch-depth: 1
# 编译msvc
- name: build-msvc
shell: cmd
env:
vc_arch: ${{ matrix.msvc_arch }}
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %vc_arch%
qmake
nmake
在windows平台测试下来,平均要1分30秒左右
- 使用缓存
缓存步骤,一般尽量写steps最前面。
name: Windows
on:
# push代码时触发workflow
push:
# 忽略README.md
paths-ignore:
- 'README.md'
- 'LICENSE'
# pull_request时触发workflow
pull_request:
# 忽略README.md
paths-ignore:
- 'README.md'
- 'LICENSE'
jobs:
build:
name: Build
# 运行平台, windows-latest目前是windows server 2019
runs-on: windows-latest
strategy:
# 矩阵配置
matrix:
qt_ver: [5.12.6]
qt_target: [desktop]
# mingw用不了
# qt_arch: [win64_msvc2017_64, win32_msvc2017, win32_mingw53,win32_mingw73]
qt_arch: [win64_msvc2017_64, win32_msvc2017]
# 额外设置msvc_arch
include:
- qt_arch: win64_msvc2017_64
msvc_arch: x64
qt_arch_install: msvc2017_64
- qt_arch: win32_msvc2017
msvc_arch: x86
qt_arch_install: msvc2017
env:
targetName: HelloActions-Qt.exe
# 步骤
steps:
- name: cacheQt
id: WindowsCacheQt
uses: actions/cache@v1
with:
path: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
key: ${{ runner.os }}-Qt/${{matrix.qt_ver}}/${{matrix.qt_arch}}
- name: setupQt
if: steps.WindowsCacheQt.outputs.cache-hit == 'true'
shell: pwsh
env:
QtPath: ../Qt/${{matrix.qt_ver}}/${{matrix.qt_arch_install}}
run: |
$qt_Path=${env:QtPath}
echo "::set-env name=Qt5_Dir::$qt_Path"
echo "::add-path::$qt_Path/bin"
# 安装Qt
- name: Install Qt
if: steps.WindowsCacheQt.outputs.cache-hit != 'true'
# 使用外部action。这个action专门用来安装Qt
uses: jurplel/install-qt-action@v2.0.0
with:
# Version of Qt to install
version: ${{ matrix.qt_ver }}
# Target platform for build
target: ${{ matrix.qt_target }}
# Architecture for Windows/Android
arch: ${{ matrix.qt_arch }}
# 拉取代码
- uses: actions/checkout@v1
with:
fetch-depth: 1
# 编译msvc
- name: build-msvc
shell: cmd
env:
vc_arch: ${{ matrix.msvc_arch }}
run: |
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %vc_arch%
qmake
nmake
加上cache后,平均只有25秒。
注意事项
- 缓存只是把文件还原了,环境变量并没有还原,我们还需要手动还原环境变量。